package com.cy.dda.service.cases;

import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.cy.dda.model.PageBean;
import com.cy.dda.model.Result;
import com.cy.dda.model.ao.cases.CasesApplyEndAO;
import com.cy.dda.model.ao.cases.CasesEditAO;
import com.cy.dda.model.dto.cases.CasesImportDTO;
import com.cy.dda.model.query.cases.CasesAdminQuery;
import com.cy.dda.model.query.cases.CasesListQuery;
import com.cy.dda.model.vo.cases.CasesAdminVO;
import com.cy.dda.model.vo.cases.CasesDetailInfoAdminVO;
import com.cy.dda.model.vo.cases.CasesDetailInfoVO;
import com.cy.dda.model.vo.cases.CasesListVO;
import com.cy.dda.model.vo.cases.CasesLoanDetailInfoVO;

/**
 * 委案service
 *
 * @author: tanyilin
 * @create: 2018年11月1日 下午2:12:07
 */
public interface CasesService {

	/**
	 * 从输入的Excel文件中解析数据，得到导入的委案信息
	 * 
	 * @param multipartFile
	 * @return
	 */
	List<CasesImportDTO> getCasesImportDTO(MultipartFile multipartFile);
	
	/**
	 * 导入添加委案
	 * 
	 * @param casesImportList
	 */
	void addCases(List<CasesImportDTO> casesImportList);
	
	/**
	 * 批量分配委案，一键派单
	 * 
	 * @param casesIds
	 */
	Result<List<Long>> distributeCasesBatch(String casesIds);
	
	/**
	 * 重新分配催收员
	 * 
	 * @param casesId
	 */
	void redistributionCases(Long casesId);
	
	/**
	 * 指定用户分配委案
	 * 
	 * @param casesId
	 * @param userId
	 */
	void appointDistributeCases(Long casesId, Long userId);
	
	/**
	 * 前台用户接受委案
	 * 
	 * @param casesId
	 * @param userId
	 */
	void acceptCases(Long casesId, Long userId);
	
	/**
	 * 后台查询委案列表数据。分页
	 * 
	 * @param query
	 * @return
	 */
	PageBean<CasesAdminVO> selectCasesAdminList(CasesAdminQuery query);
	
	/**
	 * 查询，后台委案信息详情
	 * 
	 * @param casesId
	 * @return
	 */
	CasesDetailInfoAdminVO selectCasesDetailInfoAdminVO(Long casesId);
	
	/**
	 * 后台-委案编辑，显示的信息
	 * 
	 * @param casesId
	 * @return
	 */
	CasesDetailInfoAdminVO selectCasesEditInfoAdmin(Long casesId);
	
	/**
	 * 后台-确认结束委案
	 * 
	 * @param casesId
	 */
	void toConfirmEndCases(Long casesId);
	
	/**
	 * 前台-查询委案列表
	 * 
	 * @param query
	 * @return
	 */
	PageBean<CasesListVO> selectCasesList(CasesListQuery query);
	
	/**
	 * 前台-委案详情
	 * 
	 * @param casesId
	 * @return
	 */
	CasesDetailInfoVO selectCasesDetailInfoVO(Long casesId);
	
	/**
	 * 前台-委案-借款详情
	 * 
	 * @param casesId
	 * @return
	 */
	CasesLoanDetailInfoVO selectCasesLoanDetailInfoVO(Long casesId);
	
	/**
	 * 委案状态：从‘待结束’-->‘处理中’
	 * 
	 * @param casesId
	 */
	void updateCasesStatusFromEndWaitToProcessing(Long casesId);
	
	/**
	 * 后台-委案编辑
	 * 
	 * @param editAO
	 */
	void doEditCases(CasesEditAO editAO);

	/**
	 * 委案申请结案
	 * 
	 * @param casesApplyEndAO
	 */
	void applyEnd(CasesApplyEndAO casesApplyEndAO);
}
